﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;
using SyncList.Business.ValueObject;

namespace SyncList.Business.Business
{
    class ExportService : IExportService
    {

        /// <summary>
        /// Exporter en XML la liste des fichies scannés
        /// </summary>
        /// <param name="data">Données à sauver</param>
        /// <param name="fileName">Nom du fichier cible</param>
        /// <param name="minSize">Taille mini</param>
        public void ExportXml(Data data, string fileName, long minSize)
        {
            if(File.Exists(fileName))
                File.Copy(fileName, fileName + ".beforeexport.bak", true);

            XDocument xDoc = new XDocument();            
            XElement rootElement = new XElement("SyncList");
            xDoc.Add(rootElement);

            // - Paramètres
            XElement definitionElement = new XElement("Definition");
            rootElement.Add(definitionElement);

            // - Titre
            XElement titleElement = new XElement("Title");
            titleElement.SetValue(data.Title);
            definitionElement.Add(titleElement);

            // - Liste des chemins 
            XElement pathListElement = new XElement("PathList");
            definitionElement.Add(pathListElement);
            foreach (string path in data.PathList)
            {
                XElement pathElement = new XElement("Path");
                pathElement.SetValue(path);
                pathListElement.Add(pathElement);
            }

            // - Taille mini
            XElement filterElement = new XElement("Filter");
            filterElement.SetAttributeValue("MinSize", data.MinSize);
            definitionElement.Add(filterElement);



            XElement filesElement = new XElement("Files");
            rootElement.Add(filesElement);

            int index = 0;

            foreach (FileDef def in data.Files.OrderBy(o => o.Name))
            {
                if (def.Size < minSize) continue; // Pas moins de 10 Mo

                XElement fileElement = new XElement("File");
                fileElement.SetAttributeValue("num", index+1);
                fileElement.SetAttributeValue("name", def.Name);
                fileElement.SetAttributeValue("size", def.Size);
                fileElement.SetAttributeValue("hash", def.Hash);
                fileElement.SetAttributeValue("folder", def.LocalFolder);
                filesElement.Add(fileElement);

                index++;
            }

            xDoc.Save(fileName);
        }


    }
}
